﻿using System.Collections.Generic;
using System.Linq;
using MaxStoreErp.Core.Exceptions;
using MaxStoreShop.Domain.Directories;
using MaxStoreShop.Logic.RepositoriesContracts.Directories;
using MaxStoreShop.Logic.ServicesContracts.Directories;

namespace MaxStoreShop.Logic.Services.Directories
{
    public class CharacterService : ICharacterService
    {
        readonly ICharacterRepository _repository;

        public CharacterService(ICharacterRepository repository)
        {
            _repository = repository;
        }

        public IEnumerable<Character> GetCharacters()
        {
            return _repository.GetCharacters();
        }

        public void DeleteCharacter(Character character)
        {
            if (character == null)
                throw new ErpRuntimeException("Не указан человек для удаления!");

            var debtsCount = _repository.GetCharacterDebts(character.Id).Count();
            if (debtsCount > 0)
                throw new ErpRuntimeException(
                    string.Format("Нельзя удалить человека, т.к. к нему прикреплено {0} непогашенных долгов!",
                        debtsCount));

            _repository.DeleteCharacter(character.Id);
        }

        public void SaveCharacter(Character character)
        {
            if (character == null)
                throw new ErpRuntimeException("Не указан человек для сохранения!");

            if (string.IsNullOrWhiteSpace(character.FirstName))
                throw new ErpRuntimeException("Не указано имя человека при сохранении!");

            if (string.IsNullOrWhiteSpace(character.LastName))
                throw new ErpRuntimeException("Не указана фамилия человека при сохранении!");

            if (string.IsNullOrWhiteSpace(character.Phone))
                throw new ErpRuntimeException("Не указан контактный телефон человека при сохранении!");

            _repository.SaveCharacter(character);
        }
    }
}
